//package top.xierongsheng.user.controller;
//
//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
//import com.baomidou.mybatisplus.core.metadata.IPage;
//import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
//import io.swagger.v3.oas.annotations.Operation;
//import io.swagger.v3.oas.annotations.tags.Tag;
//import lombok.RequiredArgsConstructor;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.validation.annotation.Validated;
//import org.springframework.web.bind.annotation.*;
//import top.xierongsheng.code.CacheVariable;
//import top.xierongsheng.code.R;
//import top.xierongsheng.code.aspect.log.Log;
//import top.xierongsheng.code.aspect.log.LogType;
//import top.xierongsheng.code.aspect.power.RequiresPermissions;
//import top.xierongsheng.code.redis.RedisService;
//import top.xierongsheng.user.dto.ResourceDto;
//import top.xierongsheng.user.dto.groups.Create;
//import top.xierongsheng.user.dto.groups.Update;
//import top.xierongsheng.user.dto.groups.UpdateStatus;
//import top.xierongsheng.user.model.SYS_RESOURCE;
//import top.xierongsheng.user.model.SYS_USER;
//import top.xierongsheng.user.service.IResourceService;
//import top.xierongsheng.user.service.IRoleResourceService;
//
//import java.util.*;
//
//@Slf4j
//@RestController //这意味着这个类是一个控制器
//@RequestMapping(path = "/resource") //这意味着URL以/resource开头（在应用程序路径之后）
//@RequiredArgsConstructor
//@CrossOrigin
//@Tag(name = "菜单资源接口")
//public class ResourceController {
//
//    private final RedisService redisService;
//
//    private final IRoleResourceService roleResourceService;
//
//    private final IResourceService resourceService;
//
//    /**
//     * 新增资源
//     *
//     * @param userId
//     * @param resourceDto
//     * @return
//     * @auther 谢荣生
//     * @datetime 2020/10/27 9:46
//     */
//    @PostMapping(path = "/addResource", consumes = {"application/json", "application/x-www-form-urlencoded"})
//    @Log(type = LogType.web, desc = "资源表-新增")
//    @RequiresPermissions("menuAdd")
//    @Operation(summary = "新增资源")
//    public R addResource(@RequestHeader(name = "userId") String userId, @RequestBody @Validated(Create.class) ResourceDto resourceDto) {
//        //新增菜单
//        if (resourceDto.getType() == 1) {
//            if (resourceDto.getLevel() == null) {
//                return R.fail("请选择菜单级别");
//            }
//            if (resourceDto.getLevel() == 1) {
//                //新增一级菜单
//                if (resourceDto.getIcon().trim().isEmpty() || resourceDto.getIcon() == null) {
//                    return R.fail("菜单图标不能为空");
//                }
//                //一级菜单设置父id为0
//                resourceDto.setParentId("0");
//            } else {
//                //新增二级菜单
//                if (resourceDto.getParentId().trim().isEmpty() || resourceDto.getParentId() == null) {
//                    return R.fail("父菜单Id不能为空");
//                }
//                if (resourceDto.getUrl().trim().isEmpty() || resourceDto.getUrl() == null) {
//                    return R.fail("菜单链接地址不能为空");
//                }
//            }
//        }
//        //新增功能
//        if (resourceDto.getType() == 2) {
//            if (resourceDto.getParentId().trim().isEmpty() || resourceDto.getParentId() == null) {
//                return R.fail("功能父级Id不能为空");
//            }
//        }
//
//        //判断路由权限代码是否存在
//        SYS_RESOURCE permissionKey = resourceService.getOne(new QueryWrapper<SYS_RESOURCE>().lambda().eq(SYS_RESOURCE::getPermission, resourceDto.getPermission()), false);
//        if (permissionKey != null) {
//            return R.fail("[" + resourceDto.getPermission() + "]权限代码已存在");
//        }
//        //新增二级菜单资源时将其父级资源功能禁用
//        if (resourceDto.getLevel() == 2 && resourceDto.getType() == 1) {
//            List<SYS_RESOURCE> resourceList = resourceService.list(new QueryWrapper<SYS_RESOURCE>().lambda().and(i -> i.eq(SYS_RESOURCE::getParentId, resourceDto.getParentId()).eq(SYS_RESOURCE::getType, 2)));
//            for (SYS_RESOURCE sysResource : resourceList) {
//                sysResource.setStatus(0);
//                resourceService.updateById(sysResource);
//            }
//        }
//        //新增资源
//        resourceService.addResource(resourceDto, userId);
//        return R.ok("创建资源成功");
//    }
//
//    /**
//     * 编辑资源
//     *
//     * @param userId
//     * @param resourceDto
//     * @return
//     * @auther 谢荣生
//     * @datetime 2020/10/27 9:46
//     */
//    @PostMapping(path = "/updateResource", consumes = {"application/json", "application/x-www-form-urlencoded"})
//    @Log(type = LogType.web, desc = "资源表-更新")
//    @RequiresPermissions("menuEdit")
//    @Operation(summary = "编辑资源")
//    public R updateResource(@RequestHeader(name = "userId") String userId, @RequestBody @Validated(Update.class) ResourceDto resourceDto) {
//        //编辑菜单
//        if (resourceDto.getType() == 1) {
//            if (resourceDto.getLevel() == 1) {
//                //一级菜单
//                if (resourceDto.getIcon().trim().isEmpty() || resourceDto.getIcon() == null) {
//                    return R.fail("菜单图标不能为空");
//                }
//                //一级菜单设置父id为0
//                resourceDto.setParentId("0");
//            } else {
//                //二级菜单
//                if (resourceDto.getParentId().trim().isEmpty() || resourceDto.getParentId() == null) {
//                    return R.fail("父菜单Id不能为空");
//                }
//                if (resourceDto.getUrl().trim().isEmpty() || resourceDto.getUrl() == null) {
//                    return R.fail("菜单链接地址不能为空");
//                }
//            }
//        }
//        //编辑功能
//        if (resourceDto.getType() == 2) {
//            if (resourceDto.getParentId().trim().isEmpty() || resourceDto.getParentId() == null) {
//                return R.fail("功能父级Id不能为空");
//            }
//        }
//
//        //判断路由权限代码是否存在
//        SYS_RESOURCE permissionKey = resourceService.getOne(new QueryWrapper<SYS_RESOURCE>().lambda().eq(SYS_RESOURCE::getPermission, resourceDto.getPermission()), false);
//        if (permissionKey != null && !permissionKey.getId().equals(resourceDto.getId())) {
//            return R.fail("[" + resourceDto.getPermission() + "]权限代码已存在");
//        }
//        //编辑资源
//        SYS_RESOURCE resource = resourceService.getById(resourceDto.getId());
//        if (resource == null) {
//            return R.fail("该资源不存在");
//        }
//        if (resource.getType() != resourceDto.getType()) {
//            return R.fail("资源类型不可转换");
//        }
//        resourceService.editResource(resourceDto, userId);
//
//        //资源发生更改缓存池的角色权限同时进行更新
//        Object userInfo = redisService.get(CacheVariable.USER + userId);
//        SYS_USER user = (SYS_USER) userInfo;
//        ////拉取角色权限列表
//        List<HashMap> menuList = roleResourceService.getMenuByRoleId(user.getRoleId());
//        ////获取角色权限缓存池过期时间
//        long expire = redisService.getKeyExpire(CacheVariable.ROLE_RESOURCE + user.getRoleId());
//        ////重新写入缓存
//        redisService.set(CacheVariable.ROLE_RESOURCE + user.getRoleId(), menuList, expire > 0 ? expire : CacheVariable.ROLE_RESOURCE_EXPIRE);
//
//        return R.ok("更新资源成功");
//    }
//
//    /**
//     * 根据id获取资源详情
//     *
//     * @param userId
//     * @param id
//     * @return
//     * @auther 谢荣生
//     * @datetime 2020/10/27 9:46
//     */
//    @GetMapping(path = "getResourceInfoById")
//    @Operation(summary = "根据id获取资源详情")
//    public R getResourceInfoById(@RequestHeader(name = "userId") String userId, @RequestParam String id) {
//        if (id == null || id.trim().isEmpty()) {
//            return R.fail("资源Id不能为空");
//        }
//        SYS_RESOURCE resource = resourceService.getById(id);
//        if (resource == null) {
//            return R.fail("该资源不存在");
//        } else {
//            return R.ok("获取菜单信息成功").zip("data", resource);
//        }
//    }
//
//    /**
//     * 分页获取资源列表
//     *
//     * @param userId
//     * @param pageNo
//     * @param pageSize
//     * @return
//     * @auther 谢荣生
//     * @datetime 2020/10/27 9:49
//     */
//    @GetMapping(path = "getResourceAllPage")
//    @RequiresPermissions("searchMenu")
//    @Operation(summary = "分页获取资源列表")
//    public R getResourceAllPage(@RequestHeader(name = "userId") String userId, @RequestParam String name, @RequestParam Integer type, @RequestParam(defaultValue = "1") Integer pageNo, @RequestParam(defaultValue = "10") Integer pageSize) {
//        IPage<HashMap> page = resourceService.getResourceListPage(new Page<>(pageNo, pageSize), name, type);
//        List<HashMap> resourcesList = page.getRecords();
//
//        HashMap baseReturn = new HashMap();
//        baseReturn.put("pageNo", pageNo);
//        baseReturn.put("pageSize", pageSize);
//        baseReturn.put("total", page.getTotal());
//        baseReturn.put("list", resourcesList);
//        return R.ok().zip("data", baseReturn);
//    }
//
//    /**
//     * 获取所有资源列表
//     *
//     * @param userId
//     * @param name   资源名称（模糊查询）
//     * @param type   资源类型
//     * @return
//     * @auther 谢荣生
//     * @datetime 2020/11/5 9:05
//     */
//    @GetMapping(path = "getResourceAll")
//    @Operation(summary = "获取所有资源列表")
//    public R getResourceAll(@RequestHeader(name = "userId") String userId, @RequestParam String name, @RequestParam Integer type) {
//        List<HashMap> mapList = resourceService.getResourceList(name, type);
//        return R.ok().zip("data", mapList);
//    }
//
//    /**
//     * 根据资源id更新资源状态
//     *
//     * @param userId
//     * @param resourceDto
//     * @return
//     * @auther 谢荣生
//     * @datetime 2020/10/27 10:04
//     */
//    @PostMapping(path = "updateResourceStatusByIds", consumes = {"application/json", "application/x-www-form-urlencoded"})
//    @Log(type = LogType.web, desc = "资源表-状态更新")
//    @RequiresPermissions("menuUpdateStatus")
//    @Operation(summary = "根据资源id更新资源状态")
//    public R updateResourceStatusByIds(@RequestHeader(name = "userId") String userId, @RequestBody @Validated(UpdateStatus.class) ResourceDto resourceDto) {
//        List<String> ids = Arrays.asList(resourceDto.getId().split(","));
//        List<String> errMap = new ArrayList<String>();
//        for (String id : ids) {
//            SYS_RESOURCE sysResource = resourceService.getById(id);
//            if (sysResource == null) {
//                errMap.add("[" + id + "]该资源不存在");
//                continue;
//            }
//            //当需更改状态的是功能资源时 检索资源表是否存在该功能父级存在二级资源菜单 有->状态值不可改
//            if (sysResource.getType() == 2) {
//                List<SYS_RESOURCE> resourceList = resourceService.list(new QueryWrapper<SYS_RESOURCE>().lambda().and(i -> i.eq(SYS_RESOURCE::getParentId, sysResource.getParentId()).eq(SYS_RESOURCE::getType, 1)));
//                if (resourceList.size() > 0) {
//                    errMap.add("[" + id + "]该资源功能父级菜单下存在二级菜单，功能菜单将禁用不可改");
//                }
//            } else {
//                sysResource.setStatus(resourceDto.getStatus());
//                resourceService.updateById(sysResource);
//            }
//        }
//        if (errMap.size() > 0) {
//            return R.fail("资源状态更新失败").zip("data", errMap);
//        } else {
//            return R.ok("资源状态更新成功");
//        }
//
//    }
//
//    /**
//     * 根据菜单等级获取菜单列表
//     *
//     * @param userId
//     * @param level  菜单级别
//     * @return
//     * @auther 谢荣生
//     * @datetime 2020/11/3 13:51
//     */
//    @GetMapping(path = "getResourceByLevel")
//    @Operation(summary = "根据菜单等级获取菜单列表")
//    public R getResourceByLevel(@RequestHeader(name = "userId") String userId, @RequestParam(defaultValue = "1") Integer level) {
//        List<SYS_RESOURCE> resourcesList = resourceService.list(new QueryWrapper<SYS_RESOURCE>().lambda().eq(SYS_RESOURCE::getLevel, level).eq(SYS_RESOURCE::getType, 1));
//        return R.ok().zip("data", resourcesList);
//    }
//
//
//}
